﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
//using System.Web.UI.WebControls;
using BuyRitmus.Negocio.BLL;
using BuyRitmus.Negocio.Model;
using System.Configuration;


namespace BuyRitmus.Web.administracao.eventos
{
    public partial class cadastro : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                EstadoBLL estadoBll = new EstadoBLL();
                this.UfEvento.DataTextField = "Descricao";
                this.UfEvento.DataValueField = "Sigla";
                this.UfEvento.DataSource = estadoBll.Listar();
                this.UfEvento.DataBind();
            }
        }

        protected void BtnGravarEvento_Click(object sender, EventArgs e)
        {
            try
            {
                string diretorioFotoEvento = EfetuarUploadFotoEvento();

                EventoDTO evento = new EventoDTO
                {
                    Titulo = TituloEvento.Text,
                    Descricao = DescricaoEvento.Text,
                    Data = Convert.ToDateTime(DataEvento.Text + " " + HoraEvento.Text),
                    FotoMiniatura = diretorioFotoEvento,
                    Estado = new EstadoDTO { Sigla = UfEvento.SelectedValue }
                };
                
                EventoBLL eventoBll = new EventoBLL();
                eventoBll.Inserir(evento);
            }
            catch (Exception)
            {
                throw;
            }
        }

        private Image ConverterFotoBinarioParaImagem(Stream Buffer)
        {
            Image jpg = null;
            if (Buffer != null && Buffer.Length > 0)
                jpg = Image.FromStream(Buffer);
            return jpg;
        }

        private bool ValidarFotoEvento()
        {
            try
            {
                string[] validFileTypes = { "bmp", "gif", "png", "jpg", "jpeg", "doc", "xls" };
                string ext = System.IO.Path.GetExtension(UploadFotoEvento.PostedFile.FileName);
                bool arquivoValido = false;
                for (int i = 0; i < validFileTypes.Length; i++)
                {
                    if (ext == "." + validFileTypes[i])
                    {
                        arquivoValido = true;
                        break;
                    }
                }

                return arquivoValido;
            }
            catch (Exception)
            {
                throw;
            }
        }

        private Image RedimensionarApenasDiminuindo(Image origem, int Largura, int Altura)
        {
            int novaAltura = 0;
            int novaLargura = 0;
            if (origem.Width > Largura || origem.Height > Altura)
            {
                novaAltura = origem.Height * Largura / origem.Width;
                if (novaAltura > Altura)
                {
                    novaLargura = origem.Width * Altura / origem.Height;
                    novaAltura = Altura;
                }
                else
                    novaLargura = Largura;
            }

            if (novaLargura > 0 && novaAltura > 0)
            {
                Bitmap destino = new Bitmap(novaLargura, novaAltura);

                using (Graphics g = Graphics.FromImage(destino))
                {
                    g.DrawImage(origem, 0, 0, novaLargura, novaAltura);
                    g.Save();
                }

                return destino;
            }
            else
                return origem;
        }

        private string EfetuarUploadFotoEvento()
        {
            try
            {
                string filename = UploadFotoEvento.GetHashCode().ToString();
                if (UploadFotoEvento.HasFile)
                {
                    Image imagem = this.RedimensionarApenasDiminuindo(this.ConverterFotoBinarioParaImagem(UploadFotoEvento.FileContent), 286, 270);
                    this.GravarImagem(imagem, ConfigurationManager.AppSettings["ImgLocalPath"] + filename + ".jpg");

                    return filename + ".jpg";
                }
                return string.Empty;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void GravarImagem(Image img, string caminhoImagem)
        {
            try
            {
                string diretorioArquivo = Path.GetDirectoryName(caminhoImagem);

                if (!String.IsNullOrEmpty(diretorioArquivo))
                {
                    if (!Directory.Exists(diretorioArquivo))
                        Directory.CreateDirectory(diretorioArquivo);
                    if (!File.Exists(caminhoImagem))
                    {
                        try
                        {
                            using (Bitmap fotoTemporaria = new Bitmap(img))
                            {
                                fotoTemporaria.Save(@caminhoImagem, System.Drawing.Imaging.ImageFormat.Jpeg);
                            }                            
                        }
                        catch (Exception ex)
                        {
                            throw;
                        }
                    }
                }
                else
                {
                    throw new Exception(String.Format("O diretório recuperado do caminho {0} retornou nulo ou vazio. O thumbnail não será gerado.", diretorioArquivo));
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        private ImageCodecInfo GetEncoderInfo(String mimeType)
        {
            int j;
            ImageCodecInfo[] encoders;
            encoders = ImageCodecInfo.GetImageEncoders();
            for (j = 0; j < encoders.Length; ++j)
                if (encoders[j].MimeType == mimeType)
                    return encoders[j];
            return null;
        }

    }
}